home *** CD-ROM | disk | FTP | other *** search
- /* -------------- combobox.c -------------- */
-
- #include "dflat.h"
-
- int ListProc(WINDOW, MESSAGE, PARAM, PARAM);
-
- int ComboProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
- {
- switch (msg) {
- case CREATE_WINDOW:
- wnd->extension = CreateWindow(LISTBOX,
- NULL,
- wnd->rc.lf,wnd->rc.tp+1,
- wnd->ht-1, wnd->wd+1,
- NULL,
- GetParent(wnd),
- ListProc,
- HASBORDER | NOCLIP | SAVESELF);
- ((WINDOW)(wnd->extension))->ct->command = wnd->ct->command;
- wnd->ht = 1;
- wnd->rc.bt = wnd->rc.tp;
- break;
- case PAINT:
- foreground = FrameForeground(wnd);
- background = FrameBackground(wnd);
- wputch(wnd, DOWNSCROLLBOX, WindowWidth(wnd), 0);
- break;
- case KEYBOARD:
- if ((int)p1 == DN) {
- SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
- return TRUE;
- }
- break;
- case LEFT_BUTTON:
- if ((int)p1 == GetRight(wnd) + 1)
- SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
- break;
- default:
- break;
- }
- return BaseWndProc(COMBOBOX, wnd, msg, p1, p2);
- }
-
- int ListProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
- {
- DBOX *db = GetParent(wnd)->extension;
- WINDOW cwnd = ControlWindow(db, wnd->ct->command);
- char text[130];
- int rtn;
- WINDOW currFocus;
-
- switch (msg) {
- case CREATE_WINDOW:
- wnd->ct = malloc(sizeof(CTLWINDOW));
- break;
- case SETFOCUS:
- if ((int)p1 == FALSE)
- SendMessage(wnd, HIDE_WINDOW, 0, 0);
- break;
- case BORDER:
- currFocus = inFocus;
- inFocus = NULL;
- rtn = DefaultWndProc(wnd, msg, p1, p2);
- inFocus = currFocus;
- return rtn;
- case LB_SELECTION:
- rtn = DefaultWndProc(wnd, msg, p1, p2);
- SendMessage(wnd, LB_GETTEXT, (PARAM) text, wnd->selection);
- PutItemText(GetParent(wnd), wnd->ct->command, text);
- SendMessage(cwnd, PAINT, 0, 0);
- cwnd->TextChanged = TRUE;
- return rtn;
- case LB_CHOOSE:
- SendMessage(cwnd, SETFOCUS, TRUE, 0);
- return TRUE;
- case CLOSE_WINDOW:
- if (wnd->ct != NULL)
- free(wnd->ct);
- default:
- break;
- }
- return DefaultWndProc(wnd, msg, p1, p2);
- }
-
-